function res = GetXePhaseNoise(obj, varargin)
    p=inputParser;
    p.addOptional('nCol',       1024, @(x) x>2);
    p.addParameter('fSpan',     30.0, @(x) x>1.0);
    p.addParameter('average',   100, @(x) x>0);
    p.addParameter('isReport', false, @islogical);
    p.addParameter('description', 'normal', @ischar);
    p.parse(varargin{:});
    
    %%
    sg = MeasurementComponent.Signal.SignalGroup('XeDrivingGroup');
    sg.subscribe_signal(obj.Xe129,  ziDemodSpectrum.Theta_fft_abs_avg, [1, 1, 1]);
    sg.subscribe_signal(obj.Xe131,  ziDemodSpectrum.Theta_fft_abs_avg, [1, 1, 1]);
    res.spectrum = sg.getDemodSpectrum(p.Results.nCol, 'average', p.Results.average, 'fSpan', p.Results.fSpan);

    res.order129 = obj.Xe129.getLIAchannel.current_setting.order;
    res.order131 = obj.Xe131.getLIAchannel.current_setting.order;
    res.bandwidth129 = obj.Xe129.getLIAchannel.current_setting.bandwidth;
    res.bandwidth131 = obj.Xe131.getLIAchannel.current_setting.bandwidth;
    res.timestamp = datetime('now');
    
    obj.XePhaseNoise = res;
    fig = obj.PlotXePhaseNoise();
    %%
    if p.Results.isReport
        getReporter;
        rpt.NewRecord(['XePhaseNoise_' p.Results.description]);
        rpt.AppendFigure(fig, sprintf('XePhaseNoise %s', p.Results.description));
    end
    
    getSession;
    sess.addData('XePhaseNoise', res, p.Results.description);
    
end

